//
//  MYHomeTableViewController.swift
//  MYWeibo
//
//  Created by Magic Yu on 16/4/13.
//  Copyright © 2016年 Magic Yu. All rights reserved.
//

import UIKit
import SVProgressHUD

private let cellId = "homeID"
class MYHomeTableViewController: MYVisitorTableViewController {

    //自定义方法
    let refresh = MYRefreshControl()
    
    //tableView对应的视图模型
    private lazy var statusListModel: MYStatusListViewModel = MYStatusListViewModel()
    
    //视图层次结构已经准备完毕
    override func viewDidLoad() {
        super.viewDidLoad()
        //设置界面
        setUpUI()
        //加载数据
        loadData()
        self
        
    }
    
    private func setUpUI() {
    
        //判断当用户未登录的时候 直接返回
        if !userLogin {
        visitorView?.setVisitorInfo("关注一些人,回到这里看看有什么惊喜", imageName: "visitordiscover_feed_image_smallicon", isHome: true)
            return
        }
        //设置导航条上的自定义按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop",target: self, action: "push")
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch",target: self, action: "push")
        
        //注册cell
        prepareForTableView()
    }
    
    
    //reason: 'unable to dequeue a cell with identifier homeID - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
    //注册cell
    private func prepareForTableView() {
    
        //在未登录的情况下 加载的是访客视图 tableView是为空的 给一个空的可选项强制解包 会崩溃
        //解决办法:判断当用户未登录的时候 加载访客视图后直接返回
        tableView.registerClass(MYStatusCell.self, forCellReuseIdentifier: cellId)
        
        //设置测试固定高度
//        tableView.rowHeight = 250
        //设置行高为自动计算
        tableView.rowHeight = UITableViewAutomaticDimension
        //设置预估行高
        tableView.estimatedRowHeight = 300
        
        //设置分割线
        tableView.separatorStyle = .None
        
        //设置底部菊花
        tableView.tableFooterView = indicatorView
        
        
        //设置下拉刷新
        //系统方法
//        refreshControl = UIRefreshControl()
//        //添加监听事件
//        refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        
        //添加事件
        refresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        tableView.addSubview(refresh)
        
    }
    
    @objc private func push() {
        //进入子页面
        //print("push")
        
        let temp = MYTempViewController()
        navigationController?.pushViewController(temp, animated: true)
    }
    
    @objc private func loadData() {
        
        statusListModel.loadHomePageData(indicatorView.isAnimating()) { (isSuccess) -> () in
            
            //无论成功或者失败 都应该停止顶部菊花转动 并回到顶部
            //self.refreshControl?.endRefreshing()
            self.refresh.endRefreshing()
            
            if !isSuccess {
                SVProgressHUD.showErrorWithStatus(AppError)
                return
            }
            
            //数据请求成功后 停止底部菊花转动
            self.indicatorView.stopAnimating()
            //刷新
            self.tableView.reloadData()
        }
        
    }

    private lazy var indicatorView: UIActivityIndicatorView = {
    let v = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        return v
    }()
}

//MARK: 实现数据源方法
extension MYHomeTableViewController {

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.statusListModel.statusArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! MYStatusCell
//        cell.textLabel?.text = self.statuses[indexPath.row].text
//        cell.textLabel?.text = self.statusListModel.statuses[indexPath.row].user?.name
        cell.statusViewModel = statusListModel.statusArray[indexPath.row]
        
        //当调用loadData时 会调用loadHomePageData方法 max_id有值 刷新界面后 又调用loadData max_id会一直有值 所以一直加载 需要一个标记(底部菊花) 如果正在上拉操作 就不加载数据
        
        //先判断菊花是否转动效率高些
        if !indicatorView.isAnimating() && indexPath.row == statusListModel.statusArray.count - 1 {
            //表示正在加载最后一个cell
            loadData()
            indicatorView.startAnimating()
            
        }
        
        return cell
    }
    
    
}










